//
//  KeyboardHandleViewController.h
//  VoiceMemo
//
//  Created by shaowei on 6/24/14.
//  Copyright (c) 2014 shede333. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@class KeyboardHandleWidget;

/**
 *  键盘显示/隐藏 处理;
 *  addWidget 接口尽量在ViewWillAppear(viewDidAppear)里面调用，因为这时view的frame才最终确定，
 *  这样就能防止给出错误的frameOfKbHide；
 *  同时注意，在ViewWillAppear 防止多余的 addWidget接口调用;
 */
@interface KeyboardShowHideHandler : NSObject

/**
 *  将许要根据键盘变化控件添加到数组中，键盘变化时，会遍历数组，批量处理
 *  该方法要在键盘出现以前（或者 becomeFirstResponder）调用，
 *
 *  @param widgetModel 控件模型，包含一些必要的数据
 *
 *  @return 添加是否成功
 */
- (BOOL)addWidget:(KeyboardHandleWidget *)widgetModel;

/**
 *  获取当前能被处理的控件widget对象
 *
 *  @return widget对象 数组
 */
- (NSArray *)getAllWidget;

/**
 *  开始接受键盘变化通知，在新建该对象的时候,已经调用该接口来接受通知。
 */
- (void)startKeyboardNotify;

/**
 *  停止接受键盘变化通知
 */
- (void)stopKeyboardNotify;

/**
 *  清空所有数据，但不会干扰通知设置。
 */
- (void)resetData;

@end


/**
 *  键盘变化时，需要处理ideo对象模型
 */
@interface KeyboardHandleWidget : NSObject

/**
 *  键盘变化时，需要跟随变化的UIView；
 */
@property (nonatomic, weak) UIView *widgetView;

/**
 *  widgetView所处的UIViewController的view,用于计算widget 在键盘显示/隐藏，来计算widget高度
 */
@property (nonatomic, weak) UIView *widgetRootView;

/**
 *  键盘处于隐藏状态时，widgetView的frame；
 *  这个属性的设置可能会有问题，因为viewDidLoad之后，view的大小可能变化;
 *  ViewWillAppear(viewDidAppear)里,view 的frame菜最终确定
 */
@property (nonatomic, assign) CGRect frameOfKbHide;

/**
 *  //键盘显现时，widgetView的底沿与键盘上沿的空间高度
 */
@property (nonatomic, assign) CGFloat intervalOfWidgetToKbWhenKbShow;

@end